Autores:
Patricio Porras, Diego Altamirano

ExtracciĂ³n de Patrones con los datos de California Housing Prices¶

Objetivo y alcance del trabajo:¶

Esta prueba prĂ¡ctica se centra en el anĂ¡lisis exploratorio de datos y la visualizaciĂ³n de un conjunto de datos de viviendas. El conjunto de datos contiene informaciĂ³n sobre las caracterĂ­sticas de las viviendas, como la ubicaciĂ³n geogrĂ¡fica, el tamaño, el nĂºmero de habitaciones, el precio medio y la proximidad al ocĂ©ano.

El objetivo principal de este notebook es entender las relaciones entre las diferentes caracterĂ­sticas de las viviendas. Para ello, realizaremos una serie de tareas, incluyendo la limpieza de los datos, la transformaciĂ³n de variables categĂ³ricas en numĂ©ricas, el cĂ¡lculo de correlaciones entre las variables y la visualizaciĂ³n de estas correlaciones.

Al final de este notebook, tendremos una mejor comprensiĂ³n de cĂ³mo las diferentes caracterĂ­sticas de las viviendas estĂ¡n relacionadas entre sĂ­, lo que nos permitirĂ¡ realizar anĂ¡lisis mĂ¡s detallados en el futuro.

El dataset 'california_housing_prices.csv' contiene informaciĂ³n sobre los precios de viviendas en California. Las variables presentes en el dataset son las siguientes:

  1. longitude: La longitud geogrĂ¡fica de la ubicaciĂ³n de la vivienda.
  2. latitude: La latitud geogrĂ¡fica de la ubicaciĂ³n de la vivienda.
  3. housing_median_age: La edad mediana de las viviendas en la ubicaciĂ³n.
  4. total_rooms: El nĂºmero total de habitaciones en la vivienda.
  5. total_bedrooms: El nĂºmero total de dormitorios en la vivienda.
  6. population: La poblaciĂ³n total en la ubicaciĂ³n.
  7. households: El nĂºmero total de hogares en la ubicaciĂ³n.
  8. median_income: El ingreso mediano de los hogares en la ubicaciĂ³n.
  9. median_house_value: El valor mediano de las viviendas en la ubicaciĂ³n.
  10. ocean_proximity: La proximidad de la vivienda al océano.

El dataset contiene un total de 20,640 registros. Las variables tienen diferentes tipos de datos, siendo la mayorĂ­a variables numĂ©ricas (float64) y una variable categĂ³rica (object). Algunas variables tienen valores faltantes en el dataset.

Fase I: Carga y anĂ¡lisis exploratorio inicial de los datos¶

In [1]:
# Importamos las librerĂ­as 'pandas' con alias 'pd', 'seaborn' con alias 'sns', y 'matplotlib.pyplot' con alias 'plt'
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
In [2]:
# Cargamos el conjunto de datos 'california_housing_prices.csv' en un DataFrame llamado 'housing'
housing = pd.read_csv('california_housing_prices.csv')
In [3]:
# Utilizamos el método 'head()' para visualizar las primeras 15 filas del DataFrame 'housing'
housing.head(15)
Out[3]:
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value ocean_proximity
0 -122.23 37.88 41.0 880.0 129.0 322.0 126.0 8.3252 452600.0 NEAR BAY
1 -122.22 37.86 21.0 7099.0 1106.0 2401.0 1138.0 8.3014 358500.0 NEAR BAY
2 -122.24 37.85 52.0 1467.0 190.0 496.0 177.0 7.2574 352100.0 NEAR BAY
3 -122.25 37.85 52.0 1274.0 235.0 558.0 219.0 5.6431 341300.0 NEAR BAY
4 -122.25 37.85 52.0 1627.0 280.0 565.0 259.0 3.8462 342200.0 NEAR BAY
5 -122.25 37.85 52.0 919.0 213.0 413.0 193.0 4.0368 269700.0 NEAR BAY
6 -122.25 37.84 52.0 2535.0 489.0 1094.0 514.0 3.6591 299200.0 NEAR BAY
7 -122.25 37.84 52.0 3104.0 687.0 1157.0 647.0 3.1200 241400.0 NEAR BAY
8 -122.26 37.84 42.0 2555.0 665.0 1206.0 595.0 2.0804 226700.0 NEAR BAY
9 -122.25 37.84 52.0 3549.0 707.0 1551.0 714.0 3.6912 261100.0 NEAR BAY
10 -122.26 37.85 52.0 2202.0 434.0 910.0 402.0 3.2031 281500.0 NEAR BAY
11 -122.26 37.85 52.0 3503.0 752.0 1504.0 734.0 3.2705 241800.0 NEAR BAY
12 -122.26 37.85 52.0 2491.0 474.0 1098.0 468.0 3.0750 213500.0 NEAR BAY
13 -122.26 37.84 52.0 696.0 191.0 345.0 174.0 2.6736 191300.0 NEAR BAY
14 -122.26 37.85 52.0 2643.0 626.0 1212.0 620.0 1.9167 159200.0 NEAR BAY
In [4]:
# Utilizamos el método 'describe()' para obtener estadísticas descriptivas del DataFrame 'housing'
housing.describe()
Out[4]:
longitude latitude housing_median_age total_rooms total_bedrooms population households median_income median_house_value
count 20640.000000 20640.000000 20640.000000 20640.000000 20433.000000 20640.000000 20640.000000 20640.000000 20640.000000
mean -119.569704 35.631861 28.639486 2635.763081 537.870553 1425.476744 499.539680 3.870671 206855.816909
std 2.003532 2.135952 12.585558 2181.615252 421.385070 1132.462122 382.329753 1.899822 115395.615874
min -124.350000 32.540000 1.000000 2.000000 1.000000 3.000000 1.000000 0.499900 14999.000000
25% -121.800000 33.930000 18.000000 1447.750000 296.000000 787.000000 280.000000 2.563400 119600.000000
50% -118.490000 34.260000 29.000000 2127.000000 435.000000 1166.000000 409.000000 3.534800 179700.000000
75% -118.010000 37.710000 37.000000 3148.000000 647.000000 1725.000000 605.000000 4.743250 264725.000000
max -114.310000 41.950000 52.000000 39320.000000 6445.000000 35682.000000 6082.000000 15.000100 500001.000000
In [5]:
# Utilizamos el mĂ©todo 'info()' para obtener informaciĂ³n sobre el DataFrame 'housing'
housing.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20640 entries, 0 to 20639
Data columns (total 10 columns):
 #   Column              Non-Null Count  Dtype  
---  ------              --------------  -----  
 0   longitude           20640 non-null  float64
 1   latitude            20640 non-null  float64
 2   housing_median_age  20640 non-null  float64
 3   total_rooms         20640 non-null  float64
 4   total_bedrooms      20433 non-null  float64
 5   population          20640 non-null  float64
 6   households          20640 non-null  float64
 7   median_income       20640 non-null  float64
 8   median_house_value  20640 non-null  float64
 9   ocean_proximity     20640 non-null  object 
dtypes: float64(9), object(1)
memory usage: 1.6+ MB

Fase II: VisualizaciĂ³n de los datos¶

In [7]:
# Utilizamos el método 'hist()' de 'pandas' para visualizar un histograma de todas las columnas del DataFrame 'housing', con un tamaño de figura de 20x15
housing.hist(figsize=(20, 15))
Out[7]:
array([[<Axes: title={'center': 'longitude'}>,
        <Axes: title={'center': 'latitude'}>,
        <Axes: title={'center': 'housing_median_age'}>],
       [<Axes: title={'center': 'total_rooms'}>,
        <Axes: title={'center': 'total_bedrooms'}>,
        <Axes: title={'center': 'population'}>],
       [<Axes: title={'center': 'households'}>,
        <Axes: title={'center': 'median_income'}>,
        <Axes: title={'center': 'median_house_value'}>]], dtype=object)
No description has been provided for this image
In [8]:
# Usamos la librerĂ­a 'seaborn' para visualizar un 'scatterplot' (grĂ¡fico de dispersiĂ³n) de las columnas 'longitude' y 'latitude' de las viviendas en California (DataFrame 'housing')

sns.scatterplot(x='longitude', y='latitude', data=housing)
Out[8]:
<Axes: xlabel='longitude', ylabel='latitude'>
No description has been provided for this image
In [11]:
# Usamos la librerĂ­a 'seaborn' para visualizar un 'scatterplot' (grĂ¡fico de dispersiĂ³n) de las columnas 'longitude' y 'latitude' de las viviendas en California (DataFrame 'housing')
# Usamos el parĂ¡metro de opacidad 'alpha' de 0.1. Esto significa que los puntos tendrĂ¡n una opacidad del 10%. Esto es Ăºtil cuando tenemos muchos puntos y queremos visualizar la densidad
# Usamos el parĂ¡metro 'hue' para agregar una dimensiĂ³n adicional a la trama al colorear los puntos de datos segĂºn la variable 'median_house_value'
sns.scatterplot(x='longitude', y='latitude', data=housing, alpha=0.1, hue='median_house_value')
Out[11]:
<Axes: xlabel='longitude', ylabel='latitude'>
No description has been provided for this image
In [12]:
# Usamos la librerĂ­a 'seaborn' para visualizar un 'scatterplot' (grĂ¡fico de dispersiĂ³n) de las columnas 'longitude' y 'latitude' de las viviendas en California, con la intensidad del color representando la proximidad al ocĂ©ano
sns.scatterplot(x='longitude', y='latitude', data=housing, alpha=0.1, hue='ocean_proximity')    
Out[12]:
<Axes: xlabel='longitude', ylabel='latitude'>
No description has been provided for this image

Fase III: CorrelaciĂ³n y perfilado de datos con ydata_profiling¶

In [13]:
# Instala la librerĂ­a 'ydata_profiling' (Pandas Profiling) en el ambiente de desarrollo
#!pip install ydata_profiling

# Importa la clase 'ProfileReport' desde 'ydata_profiling'
from ydata_profiling import ProfileReport

# Utiliza Pandas Profiler para generar un informe de perfilado de datos del DataFrame 'housing'
profile = ProfileReport(housing, title='Reporte Perfilamiento de Datos', explorative=True)
profile.to_notebook_iframe()

# Opcional: Para generar un informe de perfilamiento de datos en formato HTML, utiliza el método 'to_file()' de la clase 'ProfileReport'
# profile.to_file("reporte_perfilamiento_datos.html")
Upgrade to ydata-sdk

Improve your data and profiling with ydata-sdk, featuring data quality scoring, redundancy detection, outlier identification, text validation, and synthetic data generation.

Summarize dataset:   0%|          | 0/5 [00:00<?, ?it/s]
100%|██████████| 10/10 [00:00<00:00, 65.77it/s]
Generate report structure:   0%|          | 0/1 [00:00<?, ?it/s]
Render HTML:   0%|          | 0/1 [00:00<?, ?it/s]
In [14]:
sns.scatterplot(x='housing_median_age', y='median_house_value', data=housing)
plt.title('RelaciĂ³n entre Edad Mediana de la Vivienda y Valor Mediano de la Vivienda')
plt.xlabel('Edad Mediana de la Vivienda (en años)')
plt.ylabel('Valor Mediano de la Vivienda (en dĂ³lares)')
plt.show()
No description has been provided for this image